home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr49 / 106_01.zip / BIOSLB.MAC < prev    next >
Text File  |  1993-06-26  |  3KB  |  140 lines

  1.     TITLE    BIOSLB Routine to interface 'C' to 'BIOS'
  2.     ;
  3.     ;
  4.     ;    Anyone may use this (or not as they please)
  5.     ;    for whatever purpose they wish
  6.     ;    H.R.Moran Jr. 1/31/80
  7.     ;
  8.     ;++ **************************************************
  9.     ;
  10.     ; TO USE THIS ROUTINE:
  11.     ;
  12.     ;    M80 BIOSLB,BIOSLB=BIOSLB    ...Microsoft 'M80'
  13.     ;    L80 BIOSYB,BIOSLB/N/E        ...Microsoft 'L80'
  14.     ;    REN BIOS.CRL=BIOS.COM
  15.     ;
  16.     ;    BIOS.CRL WILL BE A 'BDS C' COMPATIBLE RELOCATABLE FILE
  17.     ;    WHICH CAN BE REQUESTED AT CLINK OR INTEGRATED
  18.     ;    INTO YOUR LIBRARY WITH CLIB
  19.     ;
  20.     ;    'BDS C' calling sequence samples
  21.     ;
  22.     ;#define WARMBOOT 0
  23.     ;#define CONST 1
  24.     ;#define CONIN 2
  25.     ;#define CONOUT 3
  26.     ;#define LIST 4
  27.     ;#define PUNCH 5
  28.     ;#define READER 6
  29.     ;#define HOME 7
  30.     ;#define SELECT_DISK 8
  31.     ;#define SET_TRACK 9
  32.     ;#define SET_SECTOR 10
  33.     ;#define SET_DMA 11
  34.     ;#define READ_SECTOR 12
  35.     ;#define WRITE_SECTOR 13
  36.     ;
  37.     ;
  38.     ;char *dma_address;
  39.     ;char c;
  40.     ;int bios();  /* both B and C regs are loaded from 2'nd param */
  41.     ;          /*            A reg  is  returned as fn value */
  42.     ;int track,sector;
  43.     ;    .
  44.     ;    .
  45.     ;    .
  46.     ;  bios(SELECT_DISK,disk-'A');
  47.     ;  bios(SET_TRACK,track);
  48.     ;  bios(SET_SECTOR,sector);
  49.     ;  bios(SET_DMA,dma_address);
  50.     ;
  51.     ;
  52.     ;    if( (c=bios(READ_SECTOR,DUMMY_ARGUMENT)) != 0 )
  53.     ;      exit(puts("\nError in reading absolute sector"));
  54.     ;    .
  55.     ;    .
  56.     ;    .
  57.     ;
  58.     ;    while(1) {
  59.     ;      if( (c=bios(CONST,DUMMY_PARAMETER) )    /* keystruck */
  60.     ;        break;
  61.     ;      .
  62.     ;      .
  63.     ;      .
  64.     ;      } /* end while */
  65.     ;    c = bios(CONIN,DUMMY_PARAMETER);    /* get the char */
  66.     ;    if( c >= ' ' )                /* it is visable */
  67.     ;      bios(CONOUT,c);
  68.     ;    else {            /* make it visable */
  69.     ;      bios(CONOUT,'^');
  70.     ;      bios(CONOUT,c +'A');
  71.     ;      }
  72.     ;
  73.     ;
  74.     ;
  75.     ;-- **************************************************
  76.     ;
  77. MAGIC    EQU    3F7H        ;'BDS C' PARAMETER PASSING BUFFER
  78.     ;
  79.     ASEG
  80.     ORG    100H
  81.     .PHASE    0
  82.     ;
  83. ZERO:    DC    'BIOS'        ;MODULE NAME
  84.     DW    BIOSHEAD    ;LOCATION OF LABEL 'BIOSHEAD' IN FILE
  85.     DB    80H        ;END OF DIRECTORY ENTRIES
  86.     DW    FINIS - 100H    ;POINTER TO NEXT AVAIL LOCATION IN FILE
  87.     DS    (512 -($-ZERO))    ;PAD REST OF DIRECTORY
  88.     DS    5        ;RESERVED FOR 'CLIB'
  89.     ;
  90.     .DEPHASE
  91.     ;
  92.     PAGE
  93.     ;
  94.     ; THE BIOS() CODE HEADER ENTRY
  95.     ;
  96.     .PHASE    $-100H
  97.     ;
  98. BIOSHEAD:
  99.     DB    0        ;NO EXTERNAL 'BDS C' ROUTINES NEEDED
  100.     DW    BIOSSTOP-BIOS    ;LENGTH OF THIS ROUTINE
  101.     ;
  102.     .DEPHASE
  103.     ;
  104.     ; THE BODY OF BIOS()
  105.     ;
  106.     .PHASE    0
  107.     ;
  108. BIOS:    PUSH    B        ;SAVE TH 'BDS C' STACK POINTER
  109.     LXI    H,BIOSBACK    ;INTERMEDIATE RETURN ADRESS
  110.     PUSH    H        ;STACK IT
  111.     LHLD    MAGIC + 2    ;HL = PARAMETER TO PASS TO BIOS
  112.     MOV    B,H
  113.     MOV    C,L        ;BC = PARAMETER TO PASS TO BIOS
  114.     LDA    MAGIC        ; A = FUNCTION NUMBER
  115.     MOV    D,A
  116.     ADD    A
  117.     ADD    D        ; A = (FUNCTION NUMBER)*3
  118.     LHLD    1        ; HL = .(BIOS JUMP TABLE)
  119.     ADD    L
  120.     MOV    L,A
  121.     ADC    H
  122.     SUB    L
  123.     MOV    H,A        ; HL = (BIOS JUMP TABLE)[FUNCTION NUMBER]
  124.     PCHL            ; GO TO BIOS ROUTINE, RETURN TO 'BIOSBACK'
  125.     ;
  126. BIOSBACK:
  127.     MVI    H,0
  128.     MOV    L,A
  129.     POP    B        ;RESTORE THE 'BDS C' STACK POINTER
  130.     RET            ;TO THE 'BDS C' ROUTINE WHICH INVOKED 'BIOS'
  131.     ;
  132. BIOSSTOP:
  133.     ;
  134.     ; RELOCATION PARAMETERS
  135.     ;
  136.     DW    1            ;NUMBER OF NEEDED RELOCATION PARAMS
  137.     DW    BIOS + 2        ;POINTER TO ADDRESS NEEDING RELOC
  138.     .DEPHASE
  139. FINIS:    END    ZERO
  140.